I. Preliminaries

Loading libraries

library("tidyverse")
library("tibble")
library("msigdbr")
library("ggplot2")
library("ensembldb")
library("purrr")
library("magrittr")
library("matrixStats")
library("dplyr")
library("grex")
library("gplots")
library("RColorBrewer")
library("illuminaHumanv4.db")

Constants

DATA_DIR <- "../data/public/GEO/HDFn/"

Loading the Expression Data

The expression data are taken from this study: https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE32581

Download the RNA-seq normalized counts matrix from https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?view=data&acc=GSM807459&id=28440&db=GeoDb_blob67

hdfn.expression <- read.delim(paste0(DATA_DIR, "GSE32581-hdfn.tsv"), as.is = TRUE, header = TRUE, row.names = 1)
hdfn.expression <- rownames_to_column(hdfn.expression, "ID_REF")
hdfn.expression <- hdfn.expression[c("ID_REF", "VALUE")]
hdfn.expression

Map the Illumina probe IDs to Ensembl accessions.

illumina_to_ensembl <- data.frame(gene_id = unlist(mget(x = hdfn.expression[["ID_REF"]], envir = illuminaHumanv4ENSEMBL)))
illumina_to_ensembl <- rownames_to_column(illumina_to_ensembl, "ID_REF")
illumina_to_ensembl
hdfn.expression <- left_join(hdfn.expression, illumina_to_ensembl)
Joining with `by = join_by(ID_REF)`
hdfn.expression

Exploratory Data Analysis

We load the gene sets from RCDdb: https://pubmed.ncbi.nlm.nih.gov/39257527/

RCDdb <- "../data/public/rcd-gene-list/RCDdb/"

Necroptosis

Load the gene set.

genes <- read.csv(paste0(RCDdb, "Necroptosis.csv"))
genes$gene_id <- cleanid(genes$gene_id)
genes <- distinct(genes, gene_id, .keep_all = TRUE)
genes <- subset(genes, gene_id != "")
genes

Get the normalized expression data for the genes in the gene set.

tpm.df <- hdfn.expression %>% dplyr::filter(gene_id %in% genes$gene_id)
tpm.df <- left_join(tpm.df, genes %>% dplyr::select(gene_id, gene), by = c("gene_id" = "gene_id"))
tpm.df <- distinct(tpm.df, gene, .keep_all = TRUE)
rownames(tpm.df) <- tpm.df$gene
tpm.df <- subset(tpm.df, select = -c(gene_id, ID_REF, gene))
tpm.df <- tpm.df[order(row.names(tpm.df)), , drop = FALSE]
tpm.df

Plot the results.

NOTE: VALUE and VALUE1 are the same. This is just a workaround since R’s heatmap.2 requires the heatmap to have at least two columns.

tpm.df[["VALUE1"]] <- tpm.df[["VALUE"]]
tpm.matrix <- as.matrix(tpm.df)
heatmap.2(tpm.matrix,
  srtCol = 360,
  cellnote = tpm.matrix,
  dendrogram = "none", Colv = FALSE, Rowv = FALSE,
  col = brewer.pal(n = 9, name = "BuPu")[5:9], trace = "none", key = FALSE, lwid = c(0.1, 4), lhei = c(0.1, 4),
  cexCol = 1, cexRow = 0.75, symm = TRUE
)

Ferroptosis

Load the gene set.

genes <- read.csv(paste0(RCDdb, "Ferroptosis.csv"))
genes$gene_id <- cleanid(genes$gene_id)
genes <- distinct(genes, gene_id, .keep_all = TRUE)
genes <- subset(genes, gene_id != "")
genes

Get the normalized expression data for the genes in the gene set.

tpm.df <- hdfn.expression %>% dplyr::filter(gene_id %in% genes$gene_id)
tpm.df <- left_join(tpm.df, genes %>% dplyr::select(gene_id, gene), by = c("gene_id" = "gene_id"))
tpm.df <- distinct(tpm.df, gene, .keep_all = TRUE)
rownames(tpm.df) <- tpm.df$gene
tpm.df <- subset(tpm.df, select = -c(gene_id, ID_REF, gene))
tpm.df <- tpm.df[order(row.names(tpm.df)), , drop = FALSE]
tpm.df

Plot the results.

NOTE: VALUE and VALUE1 are the same. This is just a workaround since R’s heatmap.2 requires the heatmap to have at least two columns.

tpm.df[["VALUE1"]] <- tpm.df[["VALUE"]]
tpm.matrix <- as.matrix(tpm.df)
heatmap.2(tpm.matrix,
  srtCol = 360,
  cellnote = tpm.matrix,
  dendrogram = "none", Colv = FALSE, Rowv = FALSE,
  col = brewer.pal(n = 9, name = "BuPu")[5:9], trace = "none", key = FALSE, lwid = c(0.1, 4), lhei = c(0.1, 4),
  cexCol = 1, cexRow = 0.75, symm = TRUE
)

Pyroptosis

Load the gene set.

genes <- read.csv(paste0(RCDdb, "Pyroptosis.csv"))
genes$gene_id <- cleanid(genes$gene_id)
genes <- distinct(genes, gene_id, .keep_all = TRUE)
genes <- subset(genes, gene_id != "")
genes

Get the normalized expression data for the genes in the gene set.

tpm.df <- hdfn.expression %>% dplyr::filter(gene_id %in% genes$gene_id)
tpm.df <- left_join(tpm.df, genes %>% dplyr::select(gene_id, gene), by = c("gene_id" = "gene_id"))
tpm.df <- distinct(tpm.df, gene, .keep_all = TRUE)
rownames(tpm.df) <- tpm.df$gene
tpm.df <- subset(tpm.df, select = -c(gene_id, ID_REF, gene))
tpm.df <- tpm.df[order(row.names(tpm.df)), , drop = FALSE]
tpm.df

Plot the results.

NOTE: VALUE and VALUE1 are the same. This is just a workaround since R’s heatmap.2 requires the heatmap to have at least two columns.

tpm.df[["VALUE1"]] <- tpm.df[["VALUE"]]
tpm.matrix <- as.matrix(tpm.df)
heatmap.2(tpm.matrix,
  srtCol = 360,
  cellnote = tpm.matrix,
  dendrogram = "none", Colv = FALSE, Rowv = FALSE,
  col = brewer.pal(n = 9, name = "BuPu")[5:9], trace = "none", key = FALSE, lwid = c(0.1, 4), lhei = c(0.1, 4),
  cexCol = 1, cexRow = 0.75, symm = TRUE
)


  1. De La Salle University, Manila, Philippines, ↩︎

  2. De La Salle University, Manila, Philippines, ↩︎

LS0tDQp0aXRsZTogIkdlbmUgRXhwcmVzc2lvbiBBbmFseXNpcyINCnN1YnRpdGxlOiAiSHVtYW4gRGVybWFsIEZpYnJvYmxhc3RzLCBuZW9uYXRhbCAoSERGbikgfCBHU0UzMjU4MSB8IE5lY3JvcHRvc2lzLCBGZXJyb3B0b3NpcyAmIFB5cm9wdG9zaXMiDQphdXRob3I6IA0KICAtIE1hcmsgRWR3YXJkIE0uIEdvbnphbGVzXltEZSBMYSBTYWxsZSBVbml2ZXJzaXR5LCBNYW5pbGEsIFBoaWxpcHBpbmVzLCBnb256YWxlcy5tYXJrZWR3YXJkQGdtYWlsLmNvbV0NCiAgLSBEci4gQW5pc2ggTS5TLiBTaHJlc3RoYV5bRGUgTGEgU2FsbGUgVW5pdmVyc2l0eSwgTWFuaWxhLCBQaGlsaXBwaW5lcywgYW5pc2guc2hyZXN0aGFAZGxzdS5lZHUucGhdDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBJLiBQcmVsaW1pbmFyaWVzDQoNCiMjIyBMb2FkaW5nIGxpYnJhcmllcw0KDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJ0aWJibGUiKQ0KbGlicmFyeSgibXNpZ2RiciIpDQpsaWJyYXJ5KCJnZ3Bsb3QyIikNCmxpYnJhcnkoImVuc2VtYmxkYiIpDQpsaWJyYXJ5KCJwdXJyciIpDQpsaWJyYXJ5KCJtYWdyaXR0ciIpDQpsaWJyYXJ5KCJtYXRyaXhTdGF0cyIpDQpsaWJyYXJ5KCJkcGx5ciIpDQpsaWJyYXJ5KCJncmV4IikNCmxpYnJhcnkoImdwbG90cyIpDQpsaWJyYXJ5KCJSQ29sb3JCcmV3ZXIiKQ0KbGlicmFyeSgiaWxsdW1pbmFIdW1hbnY0LmRiIikNCmBgYA0KDQojIyMgQ29uc3RhbnRzDQpgYGB7cn0NCkRBVEFfRElSIDwtICIuLi9kYXRhL3B1YmxpYy9HRU8vSERGbi8iDQpgYGANCg0KIyMgTG9hZGluZyB0aGUgRXhwcmVzc2lvbiBEYXRhDQoNClRoZSBleHByZXNzaW9uIGRhdGEgYXJlIHRha2VuIGZyb20gdGhpcyBzdHVkeTogaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW8vcXVlcnkvYWNjLmNnaT9hY2M9R1NFMzI1ODENCg0KRG93bmxvYWQgdGhlIFJOQS1zZXEgbm9ybWFsaXplZCBjb3VudHMgbWF0cml4IGZyb20gaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW8vcXVlcnkvYWNjLmNnaT92aWV3PWRhdGEmYWNjPUdTTTgwNzQ1OSZpZD0yODQ0MCZkYj1HZW9EYl9ibG9iNjcNCg0KYGBge3J9DQpoZGZuLmV4cHJlc3Npb24gPC0gcmVhZC5kZWxpbShwYXN0ZTAoREFUQV9ESVIsICJHU0UzMjU4MS1oZGZuLnRzdiIpLCBhcy5pcyA9IFRSVUUsIGhlYWRlciA9IFRSVUUsIHJvdy5uYW1lcyA9IDEpDQpoZGZuLmV4cHJlc3Npb24gPC0gcm93bmFtZXNfdG9fY29sdW1uKGhkZm4uZXhwcmVzc2lvbiwgIklEX1JFRiIpDQpoZGZuLmV4cHJlc3Npb24gPC0gaGRmbi5leHByZXNzaW9uW2MoIklEX1JFRiIsICJWQUxVRSIpXQ0KaGRmbi5leHByZXNzaW9uDQpgYGANCg0KTWFwIHRoZSBJbGx1bWluYSBwcm9iZSBJRHMgdG8gRW5zZW1ibCBhY2Nlc3Npb25zLg0KDQpgYGB7cn0NCmlsbHVtaW5hX3RvX2Vuc2VtYmwgPC0gZGF0YS5mcmFtZShnZW5lX2lkID0gdW5saXN0KG1nZXQoeCA9IGhkZm4uZXhwcmVzc2lvbltbIklEX1JFRiJdXSwgZW52aXIgPSBpbGx1bWluYUh1bWFudjRFTlNFTUJMKSkpDQppbGx1bWluYV90b19lbnNlbWJsIDwtIHJvd25hbWVzX3RvX2NvbHVtbihpbGx1bWluYV90b19lbnNlbWJsLCAiSURfUkVGIikNCmlsbHVtaW5hX3RvX2Vuc2VtYmwNCmBgYA0KDQpgYGB7cn0NCmhkZm4uZXhwcmVzc2lvbiA8LSBsZWZ0X2pvaW4oaGRmbi5leHByZXNzaW9uLCBpbGx1bWluYV90b19lbnNlbWJsKQ0KaGRmbi5leHByZXNzaW9uDQpgYGANCg0KIyMgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcw0KDQpXZSBsb2FkIHRoZSBnZW5lIHNldHMgZnJvbSBSQ0RkYjogaHR0cHM6Ly9wdWJtZWQubmNiaS5ubG0ubmloLmdvdi8zOTI1NzUyNy8NCg0KYGBge3J9DQpSQ0RkYiA8LSAiLi4vZGF0YS9wdWJsaWMvcmNkLWdlbmUtbGlzdC9SQ0RkYi8iDQpgYGANCg0KIyMjIE5lY3JvcHRvc2lzDQoNCkxvYWQgdGhlIGdlbmUgc2V0Lg0KDQpgYGB7cn0NCmdlbmVzIDwtIHJlYWQuY3N2KHBhc3RlMChSQ0RkYiwgIk5lY3JvcHRvc2lzLmNzdiIpKQ0KZ2VuZXMkZ2VuZV9pZCA8LSBjbGVhbmlkKGdlbmVzJGdlbmVfaWQpDQpnZW5lcyA8LSBkaXN0aW5jdChnZW5lcywgZ2VuZV9pZCwgLmtlZXBfYWxsID0gVFJVRSkNCmdlbmVzIDwtIHN1YnNldChnZW5lcywgZ2VuZV9pZCAhPSAiIikNCmdlbmVzDQpgYGANCg0KR2V0IHRoZSBub3JtYWxpemVkIGV4cHJlc3Npb24gZGF0YSBmb3IgdGhlIGdlbmVzIGluIHRoZSBnZW5lIHNldC4NCg0KYGBge3J9DQp0cG0uZGYgPC0gaGRmbi5leHByZXNzaW9uICU+JSBkcGx5cjo6ZmlsdGVyKGdlbmVfaWQgJWluJSBnZW5lcyRnZW5lX2lkKQ0KdHBtLmRmIDwtIGxlZnRfam9pbih0cG0uZGYsIGdlbmVzICU+JSBkcGx5cjo6c2VsZWN0KGdlbmVfaWQsIGdlbmUpLCBieSA9IGMoImdlbmVfaWQiID0gImdlbmVfaWQiKSkNCnRwbS5kZiA8LSBkaXN0aW5jdCh0cG0uZGYsIGdlbmUsIC5rZWVwX2FsbCA9IFRSVUUpDQpyb3duYW1lcyh0cG0uZGYpIDwtIHRwbS5kZiRnZW5lDQp0cG0uZGYgPC0gc3Vic2V0KHRwbS5kZiwgc2VsZWN0ID0gLWMoZ2VuZV9pZCwgSURfUkVGLCBnZW5lKSkNCnRwbS5kZiA8LSB0cG0uZGZbb3JkZXIocm93Lm5hbWVzKHRwbS5kZikpLCAsIGRyb3AgPSBGQUxTRV0NCnRwbS5kZg0KYGBgDQoNClBsb3QgdGhlIHJlc3VsdHMuDQoNCioqTk9URTogYFZBTFVFYCBhbmQgYFZBTFVFMWAgYXJlIHRoZSBzYW1lLiBUaGlzIGlzIGp1c3QgYSB3b3JrYXJvdW5kIHNpbmNlIFIncyBgaGVhdG1hcC4yYCByZXF1aXJlcyB0aGUgaGVhdG1hcCB0byBoYXZlIGF0IGxlYXN0IHR3byBjb2x1bW5zLioqDQoNCmBgYHtyLCBmaWcuaGVpZ2h0PTMwLCBmaWcud2lkdGg9MTB9DQp0cG0uZGZbWyJWQUxVRTEiXV0gPC0gdHBtLmRmW1siVkFMVUUiXV0NCnRwbS5tYXRyaXggPC0gYXMubWF0cml4KHRwbS5kZikNCmhlYXRtYXAuMih0cG0ubWF0cml4LA0KICBzcnRDb2wgPSAzNjAsDQogIGNlbGxub3RlID0gdHBtLm1hdHJpeCwNCiAgZGVuZHJvZ3JhbSA9ICJub25lIiwgQ29sdiA9IEZBTFNFLCBSb3d2ID0gRkFMU0UsDQogIGNvbCA9IGJyZXdlci5wYWwobiA9IDksIG5hbWUgPSAiQnVQdSIpWzU6OV0sIHRyYWNlID0gIm5vbmUiLCBrZXkgPSBGQUxTRSwgbHdpZCA9IGMoMC4xLCA0KSwgbGhlaSA9IGMoMC4xLCA0KSwNCiAgY2V4Q29sID0gMSwgY2V4Um93ID0gMC43NSwgc3ltbSA9IFRSVUUNCikNCmBgYA0KIyMjIEZlcnJvcHRvc2lzDQoNCkxvYWQgdGhlIGdlbmUgc2V0Lg0KDQpgYGB7cn0NCmdlbmVzIDwtIHJlYWQuY3N2KHBhc3RlMChSQ0RkYiwgIkZlcnJvcHRvc2lzLmNzdiIpKQ0KZ2VuZXMkZ2VuZV9pZCA8LSBjbGVhbmlkKGdlbmVzJGdlbmVfaWQpDQpnZW5lcyA8LSBkaXN0aW5jdChnZW5lcywgZ2VuZV9pZCwgLmtlZXBfYWxsID0gVFJVRSkNCmdlbmVzIDwtIHN1YnNldChnZW5lcywgZ2VuZV9pZCAhPSAiIikNCmdlbmVzDQpgYGANCg0KR2V0IHRoZSBub3JtYWxpemVkIGV4cHJlc3Npb24gZGF0YSBmb3IgdGhlIGdlbmVzIGluIHRoZSBnZW5lIHNldC4NCg0KYGBge3J9DQp0cG0uZGYgPC0gaGRmbi5leHByZXNzaW9uICU+JSBkcGx5cjo6ZmlsdGVyKGdlbmVfaWQgJWluJSBnZW5lcyRnZW5lX2lkKQ0KdHBtLmRmIDwtIGxlZnRfam9pbih0cG0uZGYsIGdlbmVzICU+JSBkcGx5cjo6c2VsZWN0KGdlbmVfaWQsIGdlbmUpLCBieSA9IGMoImdlbmVfaWQiID0gImdlbmVfaWQiKSkNCnRwbS5kZiA8LSBkaXN0aW5jdCh0cG0uZGYsIGdlbmUsIC5rZWVwX2FsbCA9IFRSVUUpDQpyb3duYW1lcyh0cG0uZGYpIDwtIHRwbS5kZiRnZW5lDQp0cG0uZGYgPC0gc3Vic2V0KHRwbS5kZiwgc2VsZWN0ID0gLWMoZ2VuZV9pZCwgSURfUkVGLCBnZW5lKSkNCnRwbS5kZiA8LSB0cG0uZGZbb3JkZXIocm93Lm5hbWVzKHRwbS5kZikpLCAsIGRyb3AgPSBGQUxTRV0NCnRwbS5kZg0KYGBgDQoNClBsb3QgdGhlIHJlc3VsdHMuDQoNCioqTk9URTogYFZBTFVFYCBhbmQgYFZBTFVFMWAgYXJlIHRoZSBzYW1lLiBUaGlzIGlzIGp1c3QgYSB3b3JrYXJvdW5kIHNpbmNlIFIncyBgaGVhdG1hcC4yYCByZXF1aXJlcyB0aGUgaGVhdG1hcCB0byBoYXZlIGF0IGxlYXN0IHR3byBjb2x1bW5zLioqDQoNCmBgYHtyLCBmaWcuaGVpZ2h0PTE1MCwgZmlnLndpZHRoPTEwfQ0KdHBtLmRmW1siVkFMVUUxIl1dIDwtIHRwbS5kZltbIlZBTFVFIl1dDQp0cG0ubWF0cml4IDwtIGFzLm1hdHJpeCh0cG0uZGYpDQpoZWF0bWFwLjIodHBtLm1hdHJpeCwNCiAgc3J0Q29sID0gMzYwLA0KICBjZWxsbm90ZSA9IHRwbS5tYXRyaXgsDQogIGRlbmRyb2dyYW0gPSAibm9uZSIsIENvbHYgPSBGQUxTRSwgUm93diA9IEZBTFNFLA0KICBjb2wgPSBicmV3ZXIucGFsKG4gPSA5LCBuYW1lID0gIkJ1UHUiKVs1OjldLCB0cmFjZSA9ICJub25lIiwga2V5ID0gRkFMU0UsIGx3aWQgPSBjKDAuMSwgNCksIGxoZWkgPSBjKDAuMSwgNCksDQogIGNleENvbCA9IDEsIGNleFJvdyA9IDAuNzUsIHN5bW0gPSBUUlVFDQopDQpgYGANCg0KIyMjIFB5cm9wdG9zaXMNCg0KTG9hZCB0aGUgZ2VuZSBzZXQuDQoNCmBgYHtyfQ0KZ2VuZXMgPC0gcmVhZC5jc3YocGFzdGUwKFJDRGRiLCAiUHlyb3B0b3Npcy5jc3YiKSkNCmdlbmVzJGdlbmVfaWQgPC0gY2xlYW5pZChnZW5lcyRnZW5lX2lkKQ0KZ2VuZXMgPC0gZGlzdGluY3QoZ2VuZXMsIGdlbmVfaWQsIC5rZWVwX2FsbCA9IFRSVUUpDQpnZW5lcyA8LSBzdWJzZXQoZ2VuZXMsIGdlbmVfaWQgIT0gIiIpDQpnZW5lcw0KYGBgDQoNCkdldCB0aGUgbm9ybWFsaXplZCBleHByZXNzaW9uIGRhdGEgZm9yIHRoZSBnZW5lcyBpbiB0aGUgZ2VuZSBzZXQuDQoNCmBgYHtyfQ0KdHBtLmRmIDwtIGhkZm4uZXhwcmVzc2lvbiAlPiUgZHBseXI6OmZpbHRlcihnZW5lX2lkICVpbiUgZ2VuZXMkZ2VuZV9pZCkNCnRwbS5kZiA8LSBsZWZ0X2pvaW4odHBtLmRmLCBnZW5lcyAlPiUgZHBseXI6OnNlbGVjdChnZW5lX2lkLCBnZW5lKSwgYnkgPSBjKCJnZW5lX2lkIiA9ICJnZW5lX2lkIikpDQp0cG0uZGYgPC0gZGlzdGluY3QodHBtLmRmLCBnZW5lLCAua2VlcF9hbGwgPSBUUlVFKQ0Kcm93bmFtZXModHBtLmRmKSA8LSB0cG0uZGYkZ2VuZQ0KdHBtLmRmIDwtIHN1YnNldCh0cG0uZGYsIHNlbGVjdCA9IC1jKGdlbmVfaWQsIElEX1JFRiwgZ2VuZSkpDQp0cG0uZGYgPC0gdHBtLmRmW29yZGVyKHJvdy5uYW1lcyh0cG0uZGYpKSwgLCBkcm9wID0gRkFMU0VdDQp0cG0uZGYNCmBgYA0KDQpQbG90IHRoZSByZXN1bHRzLg0KDQoqKk5PVEU6IGBWQUxVRWAgYW5kIGBWQUxVRTFgIGFyZSB0aGUgc2FtZS4gVGhpcyBpcyBqdXN0IGEgd29ya2Fyb3VuZCBzaW5jZSBSJ3MgYGhlYXRtYXAuMmAgcmVxdWlyZXMgdGhlIGhlYXRtYXAgdG8gaGF2ZSBhdCBsZWFzdCB0d28gY29sdW1ucy4qKg0KDQpgYGB7ciwgZmlnLmhlaWdodD0yMCwgZmlnLndpZHRoPTEwfQ0KdHBtLmRmW1siVkFMVUUxIl1dIDwtIHRwbS5kZltbIlZBTFVFIl1dDQp0cG0ubWF0cml4IDwtIGFzLm1hdHJpeCh0cG0uZGYpDQpoZWF0bWFwLjIodHBtLm1hdHJpeCwNCiAgc3J0Q29sID0gMzYwLA0KICBjZWxsbm90ZSA9IHRwbS5tYXRyaXgsDQogIGRlbmRyb2dyYW0gPSAibm9uZSIsIENvbHYgPSBGQUxTRSwgUm93diA9IEZBTFNFLA0KICBjb2wgPSBicmV3ZXIucGFsKG4gPSA5LCBuYW1lID0gIkJ1UHUiKVs1OjldLCB0cmFjZSA9ICJub25lIiwga2V5ID0gRkFMU0UsIGx3aWQgPSBjKDAuMSwgNCksIGxoZWkgPSBjKDAuMSwgNCksDQogIGNleENvbCA9IDEsIGNleFJvdyA9IDAuNzUsIHN5bW0gPSBUUlVFDQopDQpgYGA=